import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.border.*;

/** Options d'application du patch
  *
  * @author     Nemesis (nemesis_tt@yahoo.fr)
  * @version    08/05/04
  */

public class Options extends JPanel {

// Les éléments de la vue (IHM)
// ----------------------------
        
    /** Nom du fichier image */
    JTextField tf_fichier;
    /** Lettre du lecteur */
    JComboBox cb_direct;
    /** Choix de copie */
    JRadioButton rb_direct;
    /** Copie de sauvegarde */
    JCheckBox cb_image;
    
    /** Couleurs */
    private Color coul_evol = Color.BLUE;

// Le constructeur
// ---------------

    /** Construire le panel d'infos */
    public Options() {
        super();
        
        // Panneau de création/utilisation de l'image CD
        // ---------------------------------------------
        JPanel panel_dump = new JPanel();
        TitledBorder border_dump = BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), " Image du CD ");
        border_dump.setTitleJustification(TitledBorder.RIGHT);
        panel_dump.setBorder(border_dump);
        panel_dump.setLayout(new BoxLayout(panel_dump,BoxLayout.Y_AXIS));
        
        // Option de copie directe depuis le CD
        JPanel panel_direct = new JPanel(new FlowLayout(FlowLayout.LEFT,10,0));
        rb_direct = new JRadioButton("Extraire directement depuis le CD    ");
        cb_direct = new JComboBox();
        // Remplissage de la combo_box
        for(int i=0; i<10; i++) {
            if (Librairie.imageCD_testDrive((char)('c' + i))==0)
                cb_direct.addItem(String.valueOf((char)('C' + i)));
        }
        panel_direct.add(rb_direct);
        panel_direct.add(new JLabel("Lecteur source :"));
        panel_direct.add(cb_direct);
        
        // Option d'utilisation d'une image existante
        JPanel panel_image = new JPanel(new FlowLayout(FlowLayout.LEFT,10,0));
        JRadioButton rb_image = new JRadioButton("Utiliser une image de CD existante");
        cb_image = new JCheckBox("Conserver une copie");
        cb_image.setSelected(true);
        panel_image.add(rb_image);
        panel_image.add(cb_image);
        
        // Texte de sélection d'image sur laquelle appliquer le patch
        JPanel panel_fichier = new JPanel(new FlowLayout(FlowLayout.LEFT,5,0));
        JLabel l_fichier = new JLabel("Fichier source/cible :");
        tf_fichier = new JTextField(".\\iso\\ChronoCross_CD1.iso",20);
        tf_fichier.setFont(new Font("SansSerif", Font.PLAIN, 10));
        JButton b_fichier = new JButton("Parcourir...");
        // Commande associée au parcours
        b_fichier.addMouseListener(new Parcourir());
        panel_fichier.add(l_fichier);
        panel_fichier.add(tf_fichier);
        panel_fichier.add(b_fichier);
        
        // Constitution du panel
        panel_dump.add(panel_direct);
        panel_dump.add(panel_image);
        panel_dump.add(panel_fichier);
 
        // Regroupement des boutons pour l'image
        ButtonGroup cd_groupe = new ButtonGroup();
        cd_groupe.add(rb_direct);
        cd_groupe.add(rb_image);
        rb_direct.setSelected(true);

        // Panneau d'options d'application du patch
        // ----------------------------------------
        JPanel panel_patchage = new JPanel();
        TitledBorder border_patchage = BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), " Application du patch ");
        border_patchage.setTitleJustification(TitledBorder.RIGHT);
        panel_patchage.setBorder(border_patchage);
        panel_patchage.setLayout(new BoxLayout(panel_patchage,BoxLayout.Y_AXIS));
        
        // Check du CD (par CRC ?)
        JPanel panel_check = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JCheckBox patchage_check = new JCheckBox("Vérification de la validité de l'image",true);
        panel_check.add(patchage_check);
        
        // Constitution du panel
        panel_patchage.add(panel_check);
  
        // Panneau d'options de log
        // ------------------------
        JPanel panel_log = new JPanel();
        TitledBorder border_log = BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), " Log et débogage ");
        border_log.setTitleJustification(TitledBorder.RIGHT);
        panel_log.setBorder(border_log);
        panel_log.setLayout(new BoxLayout(panel_log,BoxLayout.Y_AXIS));
        
        // Log du CD
        JPanel panel_cd = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JCheckBox log_cd = new JCheckBox("Informations de copie de CD (copie des secteurs)",true);
        panel_cd.add(log_cd);
                
        // Log du chargement
        JPanel panel_chargement = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JCheckBox log_chargement = new JCheckBox("Chargement du patch (format correct, structure, ...)",true);
        panel_chargement.add(log_chargement);
        
        // Log de l'application
        JPanel panel_patch = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JCheckBox log_patch = new JCheckBox("Application du patch (détails des opérations effectuées",true);
        panel_patch.add(log_patch);
        
        // Niveau de détails
        JPanel panel_detail = new JPanel();
        panel_detail.setLayout(new FlowLayout(FlowLayout.LEFT,10,0));
        JLabel l_detail = new JLabel("Niveau de détail :");
        JTextField tf_detail = new JTextField("5",1);
        panel_detail.add(l_detail);
        panel_detail.add(tf_detail);
        
        // Enregistrement sur le disque dur
        JPanel panel_disque = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JCheckBox log_disque = new JCheckBox("Enregistrement dans le fichier \"Log.txt\"",true);
        panel_disque.add(log_disque);
        
        // Constitution du panel
        panel_log.add(panel_cd);
        panel_log.add(panel_chargement);
        panel_log.add(panel_patch);
        panel_log.add(panel_detail);
        panel_log.add(panel_disque);
  
        // Définition du layout de la zone
        // et ajout des éléments
        // --------------------------------
        JPanel panel_main = new JPanel();
        panel_main.setLayout(new BoxLayout(panel_main,BoxLayout.Y_AXIS));
        panel_main.add(panel_dump);
        panel_main.add(panel_patchage);
        panel_main.add(panel_log);
        add(panel_main);
    }
    
    
    private class Parcourir extends MouseAdapter {
        public void mouseClicked(MouseEvent e) {
            // Dialogue de choix d'iso
            JFileChooser ouverture = new JFileChooser("./");
            if (ouverture.showOpenDialog(e.getComponent())
                == JFileChooser.APPROVE_OPTION)
            {
                // Nom de l'iso
                try {
                    tf_fichier.setText(ouverture.getSelectedFile().getCanonicalPath());
                } catch (Exception er) {};
            }
        }
    }
        
    public boolean getSauvegarde() {
        return cb_image.isSelected();
    }

    public String getIso() {
        return tf_fichier.getText();
    }
    
    public boolean getCopieCD() {
        return rb_direct.isSelected();
    }
    
    public String getLettreCD() {
        return (String)(cb_direct.getSelectedItem());
    }
}
